package com.ahora.org.ejb.jpa.entities;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;


/**
 * The persistent class for the TB_USUARIO database table.
 * 
 */
@Entity
@Table(name="TB_USUARIO")
public class Usuario implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "SEC_USUARIO")
	@SequenceGenerator(name="SEC_USUARIO", sequenceName = "SEC_USUARIO")
	@Column(name="ID_USUARIO")
	private int idUsuario;

	@Column(name="APELL_MATER")
	private String apellMater;

	@Column(name="APELL_PATER")
	private String apellPater;

    @Lob()
	@Column(name="ARRAY_BIOMETRICO")
	private byte[] arrayBiometrico;

	@Column(name="COD_USUARIO")
	private String codUsuario;

	@Column(name="CORREO_ELECTRONICO")
	private String correoElectronico;

	@Column(name="CORREO_ELECTRONICO2")
	private String correoElectronico2;

	@Column(name="FECHA_REGISTRO")
	private Timestamp fechaRegistro;

	@Column(name="ID_ESTADO")
	private int idEstado;

	private String nombres;

	@Column(name="NUMERO_DOCUMENTO")
	private String numeroDocumento;

	private String password;

	private String sexo;
	
	@Column(name="TAMANIO")
	private int tamanio;

	@Column(name="TELEFONO_CELULAR")
	private String telefonoCelular;

	@Column(name="TELEFONO_TRABAJO")
	private String telefonoTrabajo;

	@Column(name="USUARIO")
	private String usuario;

	//bi-directional many-to-one association to ApelacionReconsideracion
	@OneToMany(mappedBy="tbUsuario")
	private Set<ApelacionReconsideracion> tbApelacionReconsideracions;

	//bi-directional many-to-one association to Asignacion
	@OneToMany(mappedBy="tbUsuario1")
	private Set<Asignacion> tbAsignacions1;

	//bi-directional many-to-one association to Asignacion
	@OneToMany(mappedBy="tbUsuario2")
	private Set<Asignacion> tbAsignacions2;

	//bi-directional many-to-one association to Auditora
	@OneToMany(mappedBy="tbUsuario")
	private Set<Auditora> tbAuditoras;

	//bi-directional many-to-one association to Cita
	@OneToMany(mappedBy="tbUsuario")
	private Set<Cita> tbCitas;

	//bi-directional many-to-one association to DetalleProcesoRequisito
	@OneToMany(mappedBy="tbUsuario")
	private Set<DetalleProcesoRequisitos> tbDetalleProcesoRequisitos;

	//bi-directional many-to-one association to DocumentoUsuario
	@OneToMany(mappedBy="tbUsuario")
	private Set<DocumentoUsuario> tbDocumentoUsuarios;

	//bi-directional many-to-one association to Expediente
	@OneToMany(mappedBy="tbUsuario")
	private Set<Expediente> tbExpedientes;

	//bi-directional many-to-one association to FlujoDocumento
	@OneToMany(mappedBy="tbUsuario")
	private Set<FlujoDocumento> tbFlujoDocumentos;

	//bi-directional many-to-one association to FlujoProceso
	@OneToMany(mappedBy="tbUsuario")
	private Set<FlujoProceso> tbFlujoProcesos;

	//bi-directional many-to-one association to MovimientoApeRec
	@OneToMany(mappedBy="tbUsuario")
	private Set<MovimientoApeRec> tbMovimientoApeRecs;

	//bi-directional many-to-one association to MovimientoDocumento
	@OneToMany(mappedBy="tbUsuarioDestinatario")
	private Set<MovimientoDocumento> tbMovimientoDocumentos1;

	//bi-directional many-to-one association to MovimientoDocumento
	@OneToMany(mappedBy="tbUsuarioRemitente")
	private Set<MovimientoDocumento> tbMovimientoDocumentos2;

	//bi-directional many-to-one association to MovimientoExpediente
	@OneToMany(mappedBy="tbUsuarioDestinatario")
	private Set<MovimientoExpediente> tbMovimientoExpedientesUsuarioDestinatario;

	//bi-directional many-to-one association to MovimientoExpediente
	@OneToMany(mappedBy="tbUsuarioRemitente")
	private Set<MovimientoExpediente> tbMovimientoExpedientesUsuarioRemitente;

	//bi-directional many-to-one association to Proceso
	@OneToMany(mappedBy="tbUsuario")
	private Set<Proceso> tbProcesos;

	//bi-directional many-to-one association to Requisito
	@OneToMany(mappedBy="tbUsuario")
	private Set<Requisitos> tbRequisitos;

	//bi-directional many-to-one association to TipoDocumentosInterno
	@OneToMany(mappedBy="tbUsuario")
	private Set<TipoDocumentosInternos> tbTipoDocumentosInternos;

	//bi-directional many-to-one association to Area
    @ManyToOne
	@JoinColumn(name="ID_AREA")
	private Area tbArea;

	//bi-directional many-to-one association to RolUsuario
    @ManyToOne
	@JoinColumn(name="ID_ROL")
	private RolUsuario tbRolUsuario;

	//bi-directional many-to-one association to TipoDocumentoIdentidad
    @ManyToOne
	@JoinColumn(name="ID_TIPO_DOCUMENTO_IDENTIDAD")
	private TipoDocumentoIdentidad tbTipoDocumentoIdentidad;

	//bi-directional many-to-one association to Usuario
    @ManyToOne
	@JoinColumn(name="ID_USUARIOREGIST")
	private Usuario tbUsuario;

	//bi-directional many-to-one association to Usuario
	@OneToMany(mappedBy="tbUsuario")
	private Set<Usuario> tbUsuarios;
	
	//bi-directional many-to-one association to Asignacion
	@OneToMany(mappedBy="tbUsuarioCre")
	private Set<ApelacionReconsideracion> tbApelacionReconsideracion;
	
	//bi-directional many-to-one association to Area
	@OneToMany(mappedBy="tbUsuario")
	
	
	private Set<Area> tbAreas;
    public Usuario() {
    }

	public int getIdUsuario() {
		return this.idUsuario;
	}

	public void setIdUsuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}

	public String getApellMater() {
		return this.apellMater;
	}

	public void setApellMater(String apellMater) {
		this.apellMater = apellMater;
	}

	public String getApellPater() {
		return this.apellPater;
	}

	public void setApellPater(String apellPater) {
		this.apellPater = apellPater;
	}

	public byte[] getArrayBiometrico() {
		return this.arrayBiometrico;
	}

	public void setArrayBiometrico(byte[] arrayBiometrico) {
		this.arrayBiometrico = arrayBiometrico;
	}

	public String getCodUsuario() {
		return this.codUsuario;
	}

	public void setCodUsuario(String codUsuario) {
		this.codUsuario = codUsuario;
	}

	public String getCorreoElectronico() {
		return this.correoElectronico;
	}

	public void setCorreoElectronico(String correoElectronico) {
		this.correoElectronico = correoElectronico;
	}

	public String getCorreoElectronico2() {
		return this.correoElectronico2;
	}

	public void setCorreoElectronico2(String correoElectronico2) {
		this.correoElectronico2 = correoElectronico2;
	}

	public Timestamp getFechaRegistro() {
		return this.fechaRegistro;
	}

	public void setFechaRegistro(Timestamp fechaRegistro) {
		this.fechaRegistro = fechaRegistro;
	}

	public int getIdEstado() {
		return this.idEstado;
	}

	public void setIdEstado(int idEstado) {
		this.idEstado = idEstado;
	}

	public String getNombres() {
		return this.nombres;
	}

	public void setNombres(String nombres) {
		this.nombres = nombres;
	}

	public String getNumeroDocumento() {
		return this.numeroDocumento;
	}

	public void setNumeroDocumento(String numeroDocumento) {
		this.numeroDocumento = numeroDocumento;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSexo() {
		return this.sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public int getTamanio() {
		return this.tamanio;
	}

	public void setTamanio(int tamanio) {
		this.tamanio = tamanio;
	}

	public String getTelefonoCelular() {
		return this.telefonoCelular;
	}

	public void setTelefonoCelular(String telefonoCelular) {
		this.telefonoCelular = telefonoCelular;
	}

	public String getTelefonoTrabajo() {
		return this.telefonoTrabajo;
	}

	public void setTelefonoTrabajo(String telefonoTrabajo) {
		this.telefonoTrabajo = telefonoTrabajo;
	}

	public String getUsuario() {
		return this.usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public Set<ApelacionReconsideracion> getTbApelacionReconsideracions() {
		return this.tbApelacionReconsideracions;
	}

	public void setTbApelacionReconsideracions(Set<ApelacionReconsideracion> tbApelacionReconsideracions) {
		this.tbApelacionReconsideracions = tbApelacionReconsideracions;
	}
	
	public Set<Asignacion> getTbAsignacions1() {
		return this.tbAsignacions1;
	}

	public void setTbAsignacions1(Set<Asignacion> tbAsignacions1) {
		this.tbAsignacions1 = tbAsignacions1;
	}
	
	public Set<Asignacion> getTbAsignacions2() {
		return this.tbAsignacions2;
	}

	public void setTbAsignacions2(Set<Asignacion> tbAsignacions2) {
		this.tbAsignacions2 = tbAsignacions2;
	}
	
	public Set<Auditora> getTbAuditoras() {
		return this.tbAuditoras;
	}

	public void setTbAuditoras(Set<Auditora> tbAuditoras) {
		this.tbAuditoras = tbAuditoras;
	}
	
	public Set<Cita> getTbCitas() {
		return this.tbCitas;
	}

	public void setTbCitas(Set<Cita> tbCitas) {
		this.tbCitas = tbCitas;
	}
	
	public Set<DetalleProcesoRequisitos> getTbDetalleProcesoRequisitos() {
		return this.tbDetalleProcesoRequisitos;
	}

	public void setTbDetalleProcesoRequisitos(Set<DetalleProcesoRequisitos> tbDetalleProcesoRequisitos) {
		this.tbDetalleProcesoRequisitos = tbDetalleProcesoRequisitos;
	}
	
	public Set<DocumentoUsuario> getTbDocumentoUsuarios() {
		return this.tbDocumentoUsuarios;
	}

	public void setTbDocumentoUsuarios(Set<DocumentoUsuario> tbDocumentoUsuarios) {
		this.tbDocumentoUsuarios = tbDocumentoUsuarios;
	}
	
	public Set<Expediente> getTbExpedientes() {
		return this.tbExpedientes;
	}

	public void setTbExpedientes(Set<Expediente> tbExpedientes) {
		this.tbExpedientes = tbExpedientes;
	}
	
	public Set<FlujoDocumento> getTbFlujoDocumentos() {
		return this.tbFlujoDocumentos;
	}

	public void setTbFlujoDocumentos(Set<FlujoDocumento> tbFlujoDocumentos) {
		this.tbFlujoDocumentos = tbFlujoDocumentos;
	}
	
	public Set<FlujoProceso> getTbFlujoProcesos() {
		return this.tbFlujoProcesos;
	}

	public void setTbFlujoProcesos(Set<FlujoProceso> tbFlujoProcesos) {
		this.tbFlujoProcesos = tbFlujoProcesos;
	}
	
	public Set<MovimientoApeRec> getTbMovimientoApeRecs() {
		return this.tbMovimientoApeRecs;
	}

	public void setTbMovimientoApeRecs(Set<MovimientoApeRec> tbMovimientoApeRecs) {
		this.tbMovimientoApeRecs = tbMovimientoApeRecs;
	}
	
	public Set<MovimientoDocumento> getTbMovimientoDocumentos1() {
		return this.tbMovimientoDocumentos1;
	}

	public void setTbMovimientoDocumentos1(Set<MovimientoDocumento> tbMovimientoDocumentos1) {
		this.tbMovimientoDocumentos1 = tbMovimientoDocumentos1;
	}
	
	public Set<MovimientoDocumento> getTbMovimientoDocumentos2() {
		return this.tbMovimientoDocumentos2;
	}

	public void setTbMovimientoDocumentos2(Set<MovimientoDocumento> tbMovimientoDocumentos2) {
		this.tbMovimientoDocumentos2 = tbMovimientoDocumentos2;
	}
	
		
	public Set<MovimientoExpediente> getTbMovimientoExpedientesUsuarioDestinatario() {
		return tbMovimientoExpedientesUsuarioDestinatario;
	}

	public void setTbMovimientoExpedientesUsuarioDestinatario(
			Set<MovimientoExpediente> tbMovimientoExpedientesUsuarioDestinatario) {
		this.tbMovimientoExpedientesUsuarioDestinatario = tbMovimientoExpedientesUsuarioDestinatario;
	}

	public Set<MovimientoExpediente> getTbMovimientoExpedientesUsuarioRemitente() {
		return tbMovimientoExpedientesUsuarioRemitente;
	}

	public void setTbMovimientoExpedientesUsuarioRemitente(
			Set<MovimientoExpediente> tbMovimientoExpedientesUsuarioRemitente) {
		this.tbMovimientoExpedientesUsuarioRemitente = tbMovimientoExpedientesUsuarioRemitente;
	}

	public Set<Proceso> getTbProcesos() {
		return this.tbProcesos;
	}

	public void setTbProcesos(Set<Proceso> tbProcesos) {
		this.tbProcesos = tbProcesos;
	}
	
	public Set<Requisitos> getTbRequisitos() {
		return this.tbRequisitos;
	}

	public void setTbRequisitos(Set<Requisitos> tbRequisitos) {
		this.tbRequisitos = tbRequisitos;
	}
	
	public Set<TipoDocumentosInternos> getTbTipoDocumentosInternos() {
		return this.tbTipoDocumentosInternos;
	}

	public void setTbTipoDocumentosInternos(Set<TipoDocumentosInternos> tbTipoDocumentosInternos) {
		this.tbTipoDocumentosInternos = tbTipoDocumentosInternos;
	}
	
	public Area getTbArea() {
		return this.tbArea;
	}

	public void setTbArea(Area tbArea) {
		this.tbArea = tbArea;
	}
	
	public RolUsuario getTbRolUsuario() {
		return this.tbRolUsuario;
	}

	public void setTbRolUsuario(RolUsuario tbRolUsuario) {
		this.tbRolUsuario = tbRolUsuario;
	}
	
	public TipoDocumentoIdentidad getTbTipoDocumentoIdentidad() {
		return this.tbTipoDocumentoIdentidad;
	}

	public void setTbTipoDocumentoIdentidad(TipoDocumentoIdentidad tbTipoDocumentoIdentidad) {
		this.tbTipoDocumentoIdentidad = tbTipoDocumentoIdentidad;
	}
	
	public Usuario getTbUsuario() {
		return this.tbUsuario;
	}

	public void setTbUsuario(Usuario tbUsuario) {
		this.tbUsuario = tbUsuario;
	}
	
	public Set<Usuario> getTbUsuarios() {
		return this.tbUsuarios;
	}

	public void setTbUsuarios(Set<Usuario> tbUsuarios) {
		this.tbUsuarios = tbUsuarios;
	}

	public Set<ApelacionReconsideracion> getTbApelacionReconsideracion() {
		return tbApelacionReconsideracion;
	}

	public void setTbApelacionReconsideracion(
			Set<ApelacionReconsideracion> tbApelacionReconsideracion) {
		this.tbApelacionReconsideracion = tbApelacionReconsideracion;
	}

	public Set<Area> getTbAreas() {
		return tbAreas;
	}

	public void setTbAreas(Set<Area> tbAreas) {
		this.tbAreas = tbAreas;
	}
	
	@Transient
	public String getUsuarioNombreCompleto(){
		return this.apellPater+" "+this.apellMater+", "+this.nombres;
	}
	
}